const path = require('path')
const fs = require('fs')
const { nativeImage } = require('electron')

export function getUserImages(folderPath, pageNum, pageSize) {
  let flag = folderExists(folderPath)
  if (flag) {
    const { images, totalCount } = readImages(folderPath, pageNum, pageSize)
    return {
      code: 200,
      data: {
        rows: images,
        total: totalCount
      }
    }
  } else {
    return {
      code: 500,
      data: null,
      message: '该目录不存在'
    }
  }
}

export async function setWallpaper(filePath) {
  try {
    // 使用动态导入来加载 wallpaper 模块
    const wallpaper = await import('wallpaper')
    // 使用 wallpaper 库设置桌面壁纸
    await wallpaper.setWallpaper(filePath, {
      screen: 'all'
    })
    return {
      code: 200,
      message: '桌面壁纸设置成功！'
    }
  } catch (error) {
    console.log(error)
    return {
      code: 500,
      message: '桌面壁纸设置出错！'
    }
  }
}

/**
 * 递归读取文件夹下所有图片并返回图片数据数组和总图片数量和本地图片路径。
 * @param {string} folderPath - 文件夹路径。
 * @param {number} [pageNum=1] - 当前页数，默认为 1。
 * @param {number} [pageSize=10] - 每页显示数量，默认为 10。
 * @returns {Object} 包含图片数据数组和总图片数量和本地图片路径的对象。
 */
function readImages(folderPath, pageNum = 1, pageSize = 10) {
  const files = fs.readdirSync(folderPath)
  const imagesData = []
  let counter = 0

  files.forEach(file => {
    const filePath = path.join(folderPath, file)
    const stats = fs.statSync(filePath)

    if (stats.isDirectory()) {
      // 如果是文件夹，则递归读取
      const subImagesData = readImages(filePath, pageNum, pageSize)
      imagesData.push(...subImagesData.images)
      counter += subImagesData.totalCount
    } else if (isImageFile(file)) {
      counter++
      if (counter > (pageNum - 1) * pageSize && counter <= pageNum * pageSize) {
        // 如果是图片文件且在当前页范围内，则读取图片数据
        const fileData = fs.readFileSync(filePath)
        const image = nativeImage.createFromBuffer(fileData)
        const base64Data = image.toDataURL()

        imagesData.push({
          name: file,
          data: base64Data,
          path: filePath
        })
      }
    }
  })

  return {
    images: imagesData,
    totalCount: counter
  }
}

/**
 * 判断文件是否为图片文件。
 * @param {string} fileName - 文件名。
 * @returns {boolean} 如果文件是图片文件则返回 true，否则返回 false。
 */
function isImageFile(fileName) {
  const imageExtensions = ['.png', '.jpg', '.jpeg', '.gif']
  const ext = path.extname(fileName).toLowerCase()
  return imageExtensions.includes(ext)
}

/**
 * 检查指定路径的文件夹是否存在。
 * @param {string} folderPath 要检查的文件夹路径。
 * @returns {boolean} 如果文件夹存在则返回 true，否则返回 false。
 * @throws {Error} 如果发生错误。
 */
function folderExists(folderPath) {
  try {
    // 使用 fs.accessSync() 来检查文件夹是否存在
    fs.accessSync(folderPath, fs.constants.F_OK)
    return true // 文件夹存在
  } catch (err) {
    return false // 文件夹不存在
  }
}
